﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TicketsPhone.Domain.Utils
{
    public class Hora : IComparable
    {
        public int CompareTo(object obj)
        {
            throw new NotImplementedException();
        }

        public int Horas { get; set; }
        public int Minutos { get; set; }
        public int Segundos { get; set; }

        public Hora()
        { }

        public Hora(TimeSpan t)
        {
            Horas = t.Hours;
            Minutos = t.Minutes;
            Segundos = t.Seconds;
        }

        public Hora(string horaCompleta)
        {
            string[] horaArray = horaCompleta.Split(new char[] { ':' });

            if (horaArray.Length > 0)
            {
                Horas = Convert.ToInt32(horaArray[0]);

                if (horaArray.Length > 1)
                {
                    Minutos = Convert.ToInt32(horaArray[1]);

                    if (horaArray.Length > 2)
                    {
                        Segundos = Convert.ToInt32(horaArray[2]);
                    }
                }
            }
        }

        public Hora(DateTime fecha)
        {
            this.Minutos = fecha.Minute;
            this.Horas = fecha.Hour;
            this.Segundos = fecha.Second;
        }

        public override string ToString()
        {
            return string.Format("{0}:{1}:{2}", Horas < 10 ? "0" + Horas : Horas.ToString(), Minutos < 10 ? "0" + Minutos : Minutos.ToString(), Segundos < 10 ? "0" + Segundos : Segundos.ToString());
        }

        public DateTime ToDateTime()
        {
            return new DateTime(2000,1, 1, Horas, Minutos, Segundos);
        }

        public TimeSpan ToTimeSpan()
        {
            return new TimeSpan(Horas, Minutos, Segundos);
        }

        public Hora AgregarMinutos(int minutos)
        {
            DateTime fecha = new DateTime(2000, 1, 1, Horas, Minutos, Segundos).AddMinutes(minutos);
            this.Minutos = fecha.Minute;
            this.Horas = fecha.Hour;
            this.Segundos = fecha.Second;
            return this;
        }

        /// <summary>
        /// Valida si la hora es mayor que la enviada
        /// </summary>
        /// <param name="hora"></param>
        /// <returns></returns>
        public bool EsMayor(Hora hora)
        {
            if (this.Horas > hora.Horas)
                return true;
            else
            {
                if (this.Horas == hora.Horas)
                {
                    if (this.Minutos > hora.Minutos)
                        return true;
                    else
                    {
                        return this.Minutos < hora.Minutos;
                    }
                }
                else
                {
                    //cuando la hora es menor retorna false
                    return false;
                }
            }
        }

    }
}
